/**
 * Generali Solutions d'assurances - Tous droits r�serv�s &copy; 2007 - 2010
 */
package fr.generali.accueilclient.commun.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;

/**
 * Classe utilitaires manipulant les dates.
 */
public class DateUtils {

    /**
     * Pattern Date
     */
    public static final String DATE_PATTERN = "dd/MM/yyyy";

    /**
     * Pattern Date
     */
    public static final String DATE_PATTERN_2 = "dd.MM.yyyy";

    /**
     * Pattern Date
     */
    public static final String DATE_PATTERN_3 = "ddMMyyyyHHmmss";

    /**
     * @param date .
     * @param years .
     * @return boolean .
     */
    public static boolean isPastYears(Date date, int years) {
        return isPastYears(date, Calendar.getInstance().getTime(), years);
    }

    /**
     * Retourne <code>true</code> si date2 est post�rieure � date1 d'au moins
     * years ann�es.
     * 
     * @param date1 .
     * @param date2 .
     * @param years .
     * @return boolean .
     */
    public static boolean isPastYears(Date date1, Date date2, int years) {
        return isPast(date1, date2, years, Calendar.YEAR);
    }

    /**
     * Retourne <code>true</code> si date2 est post�rieure � date1 d'au moins
     * nombre type.
     * 
     * @param date1 .
     * @param date2 .
     * @param nombre le nombre d'unit� .
     * @param type le type d'unit� @see {@link Calendar#YEAR} @see .
     *            {@link Calendar#MONTH}
     * @return boolean .
     */
    public static boolean isPast(Date date1, Date date2, int nombre, int type) {
        boolean isPastYears = false;
        if (date1 != null && date2 != null) {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date2);
            calendar.add(type, -nombre);

            isPastYears = calendar.getTime().compareTo(date1) >= 0;
        }

        return isPastYears;
    }

    /**
     * Contr�le si l'ann�e saisie est inf�rieure � l'ann�e courante
     * 
     * @param annee l'ann�e
     * @return boolean true si annee <= ann�e courante
     */
    public static boolean anneePasse(Integer annee) {
        boolean anneePassee = false;
        if (annee != null) {
            Calendar calendar = Calendar.getInstance();
            Integer anneeCourante = calendar.get(Calendar.YEAR);
            anneePassee = anneeCourante >= annee;
        }

        return anneePassee;
    }

    /**
     * Converti une chaine de caract�res en date
     * 
     * @param strDate la date au format string
     * @param format le pattern au format string
     * @return date la date au format Date.util
     */
    public static Date getDate(String strDate, String format) {
        Date date = null;
        if (strDate != null && format != null) {
            SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.FRANCE);
            try {
                date = formatter.parse(strDate);
            } catch (ParseException e) {
                throw new AccueilClientTechnicalException(e.getMessage(), e);
            }
        }

        return date;
    }

    /**
     * Converti une date en cha�ne de caract�res
     * 
     * @param date la date au format Date
     * @param format le pattern au format string
     * @return la chaine de caract�res correspondant � la date
     */
    public static String getStringDate(Date date, String format) {
        String dateString = null;
        if (date != null && format != null) {
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.FRANCE);
                dateString = formatter.format(date);
            } catch (Exception e) {
                throw new AccueilClientTechnicalException(e.getMessage(), e);
            }
        }
        return dateString;
    }

}
